
#include "nodo_b_mas.h"

NodoBMas::NodoBMas (Bloque* bloque, TipoDato* clave_base, TipoDato* dato_base) : Nodo(bloque, clave_base, dato_base){
	this->set_nivel(0); //El nodo B+ siempre es hoja	
}
		
unsigned short int NodoBMas::get_sig_nodo() {
	unsigned short int resultado = Nodo::BAD_REF;
	this->get_bloque()->leer((char*) &resultado, TAM_REF, TAM_REF);
	return resultado;
}

void NodoBMas::set_sig_nodo(unsigned short int siguiente) {
	this->get_bloque()->escribir((char*) &siguiente, TAM_REF, TAM_REF);
}

void NodoBMas::ingresar_con_split(NodoBMas* nodo, TipoDato* clave, TipoDato* dato){
	TipoDato* clave_aux = clave->clonar();
	TipoDato* dato_aux = dato->clonar();
	dividir_nodo(nodo, &clave_aux, &dato_aux);
	nodo->ingresar_elemento(clave_aux, dato_aux);
	nodo->primero();
	delete (clave_aux);
	delete (dato_aux);
}

bool NodoBMas::ingresar_elemento(TipoDato* clave, TipoDato* dato){
	unsigned short sgte = get_sig_nodo();
	bool retorno = Nodo::ingresar_elemento(clave,dato);
	set_sig_nodo(sgte);	
	return retorno;
}
